package org.little.beans;

import java.util.List;

/**
 * @author Tinyspot
 * @date 2022-05-19 21:43
 */
public interface BeanDefinition {

    String SCOPE_DEFAULT = "";
    String SCOPE_SINGLETON = "singleton";
    String SCOPE_PROTOTYPE = "prototype";

    String getId();

    String getBeanClassName();

    boolean isSingleton();

    boolean isPrototype();

    String getScope();

    void setScope(String scope);

    List<PropertyValue> getPropertyValues();

    /**
     * 获取构造参数
     * @return
     */
    ConstructorArgument getConstructorArgument();

    boolean hasConstructorArgumentValues();

    boolean hasBeanClass();

    Class<?> resolveBeanClass(ClassLoader classLoader) throws ClassNotFoundException;

    Class<?> getBeanClass() throws IllegalStateException;

    boolean isSynthetic();
}
